-- Intento de truncar usando un fold que haga solo n pasos
-- Hay problemas de aridad
--
-- foldA23N :: (a -> Integer-> d ) -> (b -> d -> d ->Integer->  d ) -> (b -> b -> d -> d -> d -> Integer-> d) -> (Arbol23 a b)  -> Integer -> d
-- foldA23N fHoja _ _ (Hoja x) n              = fHoja x n
-- foldA23N fHoja fDos fTres (Dos x izq der) n = fDos x (foldA23N fHoja fDos fTres izq (n-1)) (foldA23 fHoja fDos fTres der (n-1)) n
-- foldA23N fHoja fDos fTres (Tres x y izq med der)  n = fTres x y 
--                                                    (foldA23N fHoja fDos fTres izq (n-1)) 
--                                                    (foldA23N fHoja fDos fTres med (n-1))
--                                                    (foldA23N fHoja fDos fTres der (n-1)) n
--
-- tHoja elem _ 0= Hoja elem
-- tHoja _ x n = Hoja x

-- tDos elem _ _ _ 0= Hoja elem
-- tDos _ x izq der n= Dos x izq der

-- tTres elem _ _ _ _ _ 0 = Hoja elem
-- tTres _ x y izq med der n = Hoja elem

--trunc elem arbol n= foldA23N (tHoja elem) (tDos elem) (tTres elem) arbol n 
--

-- Intento para usarlo con foldNat
-- ese::Arbol23 a b -> Arbol23 a b -> Arbol23 a b
-- ese (Hoja x) arbol2=  (Hoja x)
-- ese (Dos x izq der) arbol2=  (Dos x arbol2 arbol2) 
-- ese (Tres x y izq med der) arbol2=  (Tres x y arbol2 arbol2)

-- Otro intento para usar con foldnat
-- ese :: (b->b) -> Arbol23 a b -> Arbol23 a b
-- ese f (Hoja x)= Hoja x
-- ese f (Dos x izq der)= Dos x (ese f izq) (ese f der)
-- ese f (Tres x y izq med der)= Tres x y (ese f izq) (ese f med) (ese f der)


-- Otra version explicita de truncar
-- trunc :: a -> Arbol23 a b -> Integer -> Arbol23 a b
-- trunc z _ 0 = Hoja z
-- trunc _ (Hoja x) n= Hoja x
-- trunc z (Dos x izq der) n= Dos x (trunc z izq (n-1)) (trunc z der (n-1))
-- trunc z (Tres x y izq med der) n= Tres x y (trunc z izq (n-1)) (trunc z med (n-1)) (trunc z der (n-1))

-- Otra version explicita de truncar
--truncarAux (Hoja x) a 0= Hoja a
--truncarAux (Hoja x) a n= Hoja x
--truncarAux (Dos x izq der) a 0= Hoja a
--truncarAux (Dos x izq der) a n= Dos x truncarAux izq elem (n-1) truncarAux der elem (n-1)
--truncarAux (Tres x y izq med der) a 0= Hoja a
--truncarAux (Tres x y izq med der) a n= Tres x y truncarAux izq elem (n-1) truncarAux med elem (n-1) truncarAux der elem (n-1)


-- Intento poco feliz con foldNat
-- truncarAux:: a -> Arbol23 a b -> Integer -> Arbol23 a b
-- truncarAux elem arbol n =  foldNat(idA23)(Hoja elem) n

